package com.pai4j.message.builder.interaction;

import com.pai4j.common.constants.MessageConstants;
import com.pai4j.common.enums.InteractionMessageTypeEnum;
import com.pai4j.domain.vo.dto.CommentReplyMessageDTO;
import com.pai4j.message.core.builder.AbstractMessageBuilder;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

/**
 * 回复消息构建器
 * 用于构建回复互动消息
 *
 * @author PAI4J Team
 * @date 2025-11-01
 */
@Slf4j
public class ReplyMessageBuilder extends AbstractMessageBuilder<CommentReplyMessageDTO> {

    public ReplyMessageBuilder() {
        super();
        context.setMessageTypeEnum(InteractionMessageTypeEnum.REPLY);
        context.setType(MessageConstants.TypeEnum.REPLY.getType());
        context.setCategory(MessageConstants.CategoryEnum.COMMENT_REPLY.getCategory());
    }

    @Override
    protected String getMessageCategory() {
        return MessageConstants.CategoryEnum.COMMENT_REPLY.getCategory();
    }

    @Override
    protected CommentReplyMessageDTO createMessageDTO() {
        return new CommentReplyMessageDTO();
    }

    @Override
    protected void fillMessageDTO(CommentReplyMessageDTO messageDTO) {
        // 填充资源信息
        if (context.getResourceType() != null) {
            messageDTO.setResourceType(context.getResourceType());
        }
        if (context.getResourceId() != null) {
            messageDTO.setResourceId(context.getResourceId());
        }

        // 如果内容为空，使用默认格式
        if (messageDTO.getContent() == null) {
            messageDTO.setContent("回复了你的评论");
        }
    }

    @Override
    protected boolean doValidate() {
        // 回复内容不能为空
        if (StringUtils.isBlank(context.getContent())) {
            log.warn("回复内容不能为空");
            return false;
        }
        // 回复ID或评论ID至少要有一个
        if (context.getReplyId() == null && context.getCommentId() == null) {
            log.warn("回复消息必须指定回复ID或评论ID");
            return false;
        }
        return true;
    }

    @Override
    protected String[] getTemplateVarNames() {
        return new String[]{"userName", "replyContent", "originalComment"};
    }

    /**
     * 快速构建回复消息
     */
    public static ReplyMessageBuilder create() {
        return new ReplyMessageBuilder();
    }
}

